package koby99.swing.outline;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

public class J21_AdvancedComPonent extends JFrame {

	/* 고급 컴퍼넌트 (많은 데이터 표시)
	 	JList				: 몇 가지 데이터 목록을 나란히 표시하고
	 						  한가지를 선택하게 함
	 	JComboBox	: 일명 dropdownlist 라고 함
	 						  평소에는 전체 목록을 숨기고 있다가
	 						  클릭하면 전체 목록이 나타남
	 						  최종적으로 선택한 항목이 화면에 표시됨
	 						  
	 	JTable 			: 엑셀처럼 대량의 데이터들을 표 형태로 나타냄
	 						표는 대량의 데이터들을 행과 열형태로 표시한 것
	 						JTable에서는 DefaultTableModel 이라는 클래스를 
	 						이용해서 데이터를 표현함
	 						테이블의 제목행은 1차원 배열에,
	 						본문행은 2차원 배열에 작성해 둔 다음
	 						DefaultTableModel의 매게변수로 전달
	 						한편, 배열 대신 Vector 를 이용해서
	 						TableModel을 작성하기도 함 
	*/ 
	private JPanel contentPane;
	private JTable table;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J21_AdvancedComPonent frame = new J21_AdvancedComPonent();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J21_AdvancedComPonent() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.NORTH);
		String[] datalist = { "김태희", "송혜교","전지현","수지"}; 
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setPreferredSize(new Dimension(125, 55));
		panel.add(scrollPane);
		
		final JList<String> list = new JList<>();
		scrollPane.setViewportView(list);
		list.setListData(datalist);
		//list.setPreferredSize(new Dimension(120,50));
		
		JButton btn1 = new JButton("New button");
		btn1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
					int idx = list.getSelectedIndex();
					String val = list.getSelectedValue();
					JOptionPane.showMessageDialog(null, idx+ "\\"+ val);
			}
		});
		panel.add(btn1);
		
		JPanel panel_1 = new JPanel();
		contentPane.add(panel_1, BorderLayout.WEST);
		
		JPanel panel_2 = new JPanel();
		contentPane.add(panel_2, BorderLayout.EAST);
		
		JPanel panel_3 = new JPanel();
		contentPane.add(panel_3, BorderLayout.SOUTH);
		
		final JComboBox comboBox = new JComboBox(datalist);
		
		panel_3.add(comboBox);
		
		JButton btn2 = new JButton("New button");
		btn2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int idx = comboBox.getSelectedIndex();
				String val = (String) comboBox.getSelectedItem();
				JOptionPane.showMessageDialog(null, idx+ "\\"+ val);
				
			}
		});
		
		panel_3.add(btn2);
		
		JPanel panel_4 = new JPanel();
		contentPane.add(panel_4, BorderLayout.CENTER);

	
		
		
//		table = new JTable(8,5); 8행 5열 테이블
		// 테이블의 제목행 생성
		String[] tbtitle = { "번호", "이름", "국어", "영어", "수학"};
		// 테이블의 본문행 생성
		String[][] tbdata = {
				{"1", "김태희", "88", "98", "55"},
				{"2", "송혜교", "86", "78", "95"},
				{"3", "전지현", "77", "59", "100"}
		};
		// 제목/본문행을 DefaultTableModel 클래스에 등록
		DefaultTableModel tbmodel = 
				new DefaultTableModel(tbdata, tbtitle);
		// JTable 생성자dp DefaultTableModel 클래스 전달
		table = new JTable( tbmodel );
	
		JScrollPane scrollPane2 = new JScrollPane();
		scrollPane2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane2.setPreferredSize(new Dimension(350, 120));
		scrollPane2.setViewportView(table);
//		scrollPane2.add(table); 
		panel_4.add(scrollPane2);
	}

}
